﻿using System;

namespace cludg.Infrastructure.Core.Logging
{
	public interface ILogger
	{
		/// <summary>
		/// Debug messages
		/// </summary>
		/// <param name="message"></param>
		void Debug(object message);

		/// <summary>
		/// Debug messages with trace
		/// </summary>
		/// <example>
		/// ...catch(Exception _ex)
		/// {
		///		LogManager.Instance.Debug("My message", _ex);
		/// }
		/// </example>
		/// <param name="message"></param>
		/// <param name="exception"></param>
		void Debug(object message, Exception exception);

		/// <summary>
		/// Formated debug messages
		/// </summary>
		/// <param name="format"></param>
		/// <param name="args"></param>
		void DebugFormat(string format, params object[] args);

		/// <summary>
		/// Info messages
		/// </summary>
		/// <param name="message"></param>
		void Info(object message);

		/// <summary>
		/// Info messages with trace
		/// </summary>
		/// <example>
		/// ...catch(Exception _ex)
		/// {
		///		LogManager.Instance.Info("My message", _ex);
		/// }
		/// </example>
		/// <param name="message"></param>
		/// <param name="exception"></param>
		void Info(object message, Exception exception);

		/// <summary>
		/// Formated info message
		/// </summary>
		/// <param name="format"></param>
		/// <param name="args"></param>
		void InfoFormat(string format, params object[] args);

		/// <summary>
		/// Warning message
		/// </summary>
		/// <param name="message"></param>
		void Warn(object message);

		/// <summary>
		/// Warning message with trace
		/// </summary>
		/// <example>
		/// ...catch(Exception _ex)
		/// {
		///		LogManager.Instance.Warn("My message", _ex);
		/// }
		/// </example>
		/// <param name="message"></param>
		/// <param name="exception"></param>
		void Warn(object message, Exception exception);

		/// <summary>
		/// Formated warning message
		/// </summary>
		/// <param name="format"></param>
		/// <param name="args"></param>
		void WarnFormat(string format, params object[] args);

		/// <summary>
		/// Error message
		/// </summary>
		/// <param name="message"></param>
		void Error(object message);

		/// <summary>
		/// Error message with trace exception
		/// </summary>
		/// <example>
		/// ...catch(Exception _ex)
		/// {
		///		LogManager.Instance.Error("My message", _ex);
		/// }
		/// </example>
		/// <param name="message"></param>
		/// <param name="exception"></param>
		void Error(object message, Exception exception);

		/// <summary>
		/// Formated error messages
		/// </summary>
		/// <param name="format"></param>
		/// <param name="args"></param>
		void ErrorFormat(string format, params object[] args);

		/// <summary>
		/// Fatal messages
		/// </summary>
		/// <param name="message"></param>
		void Fatal(object message);

		/// <summary>
		/// Fatal messages with exception traced
		/// </summary>
		/// <example>
		/// ...catch(Exception _ex)
		/// {
		///		LogManager.Instance.Fatal("My message", _ex);
		/// }
		/// </example>
		/// <param name="message"></param>
		/// <param name="exception"></param>
		void Fatal(object message, Exception exception);

		/// <summary>
		/// Formated fatal messages
		/// </summary>
		/// <param name="format"></param>
		/// <param name="args"></param>
		void FatalFormat(string format, params object[] args);
	}
}
